home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 126-150 / scopedisk132 / algorhythms / source / files.c < prev    next >
C/C++ Source or Header  |  1995-03-19  |  5KB  |  194 lines

  1. /* files.c */
  2. /* Copyright 1990 Thomas E. Janzen All Rights Reserved */
  3. /*
  4. **  FACILITY:
  5. **
  6. **    AlgoRhythms music improviser on Commodore (TM) Amiga (TM)
  7. **    compiled with Lattice (TM) C 5.05
  8. **
  9. **  ABSTRACT:
  10. **
  11. **    Algorhythms improvises music over the MIDI serial port.
  12. **
  13. **  AUTHORS: Thomas E. Janzen
  14. **
  15. **  CREATION DATE:    26-MAR-1990
  16. **
  17. **  MODIFICATION HISTORY:
  18. **    DATE    NAME    DESCRIPTION
  19. **--
  20. */
  21.  
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <math.h>
  25. #include <stdlib.h>
  26. #include "AlgoRhythms.h"
  27.  
  28. extern struct GfxBase *GfxBase;
  29. extern struct IntuitionBase *IntuitionBase;
  30. extern struct DOSBase *DOSBase;
  31. extern struct MathBase *MathBase;
  32.  
  33. static int Open_Read_File(char *FileName);
  34. static int Open_Save_File(char *FileName);
  35.  
  36. FILE *FilePointer;
  37.  
  38. struct Parameter {
  39.     double CenterCycle;
  40.     double CenterPhase;
  41.     double SpreadCycle;
  42.     double SpreadPhase;
  43. };
  44.  
  45. int Save_File(char *FileName, const double *TotalDuration,
  46.     const int *ScaleLength, const int Scale[], const int *voices,
  47.     const int *tempo,
  48.     const struct Parameter *Pitch, 
  49.     const struct Parameter *Thickness,
  50.     const struct Parameter *Dynamics, 
  51.     const struct Parameter *Duration,
  52.     const struct NoteEvent *Events,
  53.     double MinNoteLen, double MaxNoteLen){
  54.  
  55.     int Status=0;
  56.     register int ScaleIndex;
  57.     register int i;
  58.     
  59.     Status=Open_Save_File(FileName);
  60.     if(Status == 1) return Status;
  61.  
  62.     fprintf(FilePointer,"%4.2f\n",*TotalDuration);
  63.     fprintf(FilePointer,"%4.2f\n",MinNoteLen);
  64.     fprintf(FilePointer,"%4.2f\n",MaxNoteLen);
  65.     fprintf(FilePointer,"%d\n",*ScaleLength);
  66.     for(ScaleIndex = 0; ScaleIndex<(*ScaleLength); ScaleIndex++) {
  67.         fprintf(FilePointer,"%d\n",Scale[ScaleIndex]);
  68.     }
  69.  
  70.     fprintf(FilePointer,"%d\n",*voices);
  71.     fprintf(FilePointer,"%d\n",*tempo);
  72.  
  73.     fprintf(FilePointer,"%4.2f\n",Pitch->CenterCycle);
  74.     fprintf(FilePointer,"%4.2f\n",Pitch->CenterPhase);
  75.     fprintf(FilePointer,"%4.2f\n",Pitch->SpreadCycle);
  76.     fprintf(FilePointer,"%4.2f\n",Pitch->SpreadPhase);
  77.  
  78.     fprintf(FilePointer,"%4.2f\n",Duration->CenterCycle);
  79.     fprintf(FilePointer,"%4.2f\n",Duration->CenterPhase);
  80.     fprintf(FilePointer,"%4.2f\n",Duration->SpreadCycle);
  81.     fprintf(FilePointer,"%4.2f\n",Duration->SpreadPhase);
  82.  
  83.     fprintf(FilePointer,"%4.2f\n",Dynamics->CenterCycle);
  84.     fprintf(FilePointer,"%4.2f\n",Dynamics->CenterPhase);
  85.     fprintf(FilePointer,"%4.2f\n",Dynamics->SpreadCycle);
  86.     fprintf(FilePointer,"%4.2f\n",Dynamics->SpreadPhase);
  87.  
  88.     fprintf(FilePointer,"%4.2f\n",Thickness->SpreadCycle);
  89.     fprintf(FilePointer,"%4.2f\n",Thickness->SpreadPhase);
  90.  
  91.     for(i=0;i<MAXVOICE;i++) {
  92.         fprintf(FilePointer,"%d  %d  %d  %d\n",
  93.         Events[i].LowPitch,Events[i].HighPitch,Events[i].Channel,
  94.         Events[i].Walking);
  95.     }
  96.     fclose(FilePointer);
  97.     return(0);
  98. }
  99.  
  100. int Read_File(char *FileName, double *TotalDuration, 
  101.     int *ScaleLength, int Scale[], int *voices, int *tempo,
  102.     struct Parameter *Pitch, struct Parameter *Thickness,
  103.     struct Parameter *Dynamics, struct Parameter *Duration,
  104.     const struct NoteEvent *Events, double *MinNoteLen,
  105.     double *MaxNoteLen) {
  106.     int Status=0;
  107.     register int ScaleIndex;
  108.     static char tempstring[40];
  109.     char *stringptr;
  110.     int buflen=40;
  111.     register i;
  112.     Status=Open_Read_File(FileName);
  113.     if (Status != 0) {
  114.         return Status;
  115.     }
  116.     
  117.     stringptr=fgets(tempstring,buflen,FilePointer);
  118.     *TotalDuration=atof(tempstring);
  119.  
  120.     stringptr=fgets(tempstring,buflen,FilePointer);
  121.     *MinNoteLen=atof(tempstring);
  122.  
  123.     stringptr=fgets(tempstring,buflen,FilePointer);
  124.     *MaxNoteLen=atof(tempstring);
  125.  
  126.  
  127.     fscanf(FilePointer,"%d",ScaleLength);
  128.     for(ScaleIndex = 0; ScaleIndex<(*ScaleLength); ScaleIndex++) {
  129.         fscanf(FilePointer,"%d",&Scale[ScaleIndex]);
  130.     }
  131.  
  132.     fscanf(FilePointer,"%d",voices);
  133.     fscanf(FilePointer,"%d",tempo);
  134.  
  135.     stringptr=fgets(tempstring,buflen,FilePointer); /*junk*/
  136.  
  137.     stringptr=fgets(tempstring,buflen,FilePointer);
  138.     Pitch->CenterCycle=atof(tempstring);
  139.     stringptr=fgets(tempstring,buflen,FilePointer);
  140.     Pitch->CenterPhase=atof(tempstring);
  141.     stringptr=fgets(tempstring,buflen,FilePointer);
  142.     Pitch->SpreadCycle=atof(tempstring);
  143.     stringptr=fgets(tempstring,buflen,FilePointer);
  144.     Pitch->SpreadPhase=atof(tempstring);
  145.  
  146.     stringptr=fgets(tempstring,buflen,FilePointer);
  147.     Duration->CenterCycle=atof(tempstring);
  148.     stringptr=fgets(tempstring,buflen,FilePointer);
  149.     Duration->CenterPhase=atof(tempstring);
  150.     stringptr=fgets(tempstring,buflen,FilePointer);
  151.     Duration->SpreadCycle=atof(tempstring);
  152.     stringptr=fgets(tempstring,buflen,FilePointer);
  153.     Duration->SpreadPhase=atof(tempstring);
  154.  
  155.     stringptr=fgets(tempstring,buflen,FilePointer);
  156.     Dynamics->CenterCycle=atof(tempstring);
  157.     stringptr=fgets(tempstring,buflen,FilePointer);
  158.     Dynamics->CenterPhase=atof(tempstring);
  159.     stringptr=fgets(tempstring,buflen,FilePointer);
  160.     Dynamics->SpreadCycle=atof(tempstring);
  161.     stringptr=fgets(tempstring,buflen,FilePointer);
  162.     Dynamics->SpreadPhase=atof(tempstring);
  163.  
  164.     stringptr=fgets(tempstring,buflen,FilePointer);
  165.     Thickness->SpreadCycle=atof(tempstring);
  166.     stringptr=fgets(tempstring,buflen,FilePointer);
  167.     Thickness->SpreadPhase=atof(tempstring);
  168.  
  169.     for(i=0;i<MAXVOICE;i++) {
  170.         stringptr=fgets(tempstring,buflen,FilePointer);
  171.         sscanf(stringptr,"%d  %d  %d  %d",
  172.         &(Events[i].LowPitch),&(Events[i].HighPitch),
  173.         &(Events[i].Channel),&(Events[i].Walking));
  174.     }
  175.     fclose(FilePointer);
  176.     return 0;
  177. }
  178.  
  179. static int Open_Read_File(char *FileName) {
  180.     char *mode="r";
  181.     if ((FilePointer = fopen(FileName, mode)) == NULL) {
  182.         return(1);
  183.     }
  184.     return 0;
  185. }
  186.  
  187. static int Open_Save_File(char *FileName) {
  188.     char *mode="w";
  189.     if ((FilePointer = fopen(FileName, mode)) == NULL) {
  190.         return(1);
  191.     }
  192.     return 0;
  193. }
  194.